package ai.rpc.core.registry;

import ai.rpc.core.config.RegistryConfig;
import ai.rpc.core.model.ServiceMetaInfo;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * @Author: mengyu
 * @Date: 2024/7/26
 * 注册中心
 */
public interface Registry {
    /**
     * 初始化
     *
     * @param registryConfig 注册发现服务器信息
     */
    void init(RegistryConfig registryConfig);

    /**
     * 服务注册 （服务提供端）
     *
     * @param serviceMetaInfo 服务注册信息
     */
    void register(ServiceMetaInfo serviceMetaInfo) throws ExecutionException, InterruptedException;

    /**
     * 注销服务（服务提供端）
     *
     * @param serviceMetaInfo 服务信息
     */
    void unRegister(ServiceMetaInfo serviceMetaInfo) throws ExecutionException, InterruptedException;

    /**
     * 服务发现（获取某服务的所有节点，服务消费端）
     *
     * @param serviceKey 服务键名
     * @return 服务节点列表
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey) throws ExecutionException, InterruptedException;

    /**
     * 服务销毁
     */
    void destroy();

    /**
     * 心跳检测（服务端）
     */
    void heartBeat();
}
